class Reserva < ActiveRecord::Base
  attr_accessible :data_encerramento, :data_entrada_hospedagem, :data_saida_hospedagem, :quarto_id, :hospede_id, :funcionario_id

  belongs_to :funcionario
  belongs_to :hospede
  belongs_to :quarto

  validates_presence_of :data_entrada_hospedagem, :data_saida_hospedagem
  validates_presence_of :funcionario_id, :hospede_id, :quarto_id
  validate :checa_consistencia_datas, :on => :create
  validate :checa_conflitos, :on => :create

  def status
  	if self.data_encerramento
      "Confirmada"
  	else
  		"Aberta"
  	end
  end

  private
  def self.abertas
    where("data_encerramento IS NULL")
  end

  private
  def checa_consistencia_datas
    if data_entrada_hospedagem > data_saida_hospedagem
      errors[:base] << "Data de entrada nao pode ser uma data depois da data de saida"
    end
    if data_entrada_hospedagem < Time.now.to_date
      errors[:base] << "Data de entrada nao pode ser uma data anterior a atual"
    end
  end

  private
  def checa_conflitos
    reservas_conflitantes1 = Reserva.abertas.where("data_entrada_hospedagem <= ? AND data_saida_hospedagem >= ?",  data_saida_hospedagem, data_saida_hospedagem)
    if not reservas_conflitantes1.where("quarto_id = ?", quarto_id).empty?
      errors[:base] << "O quarto requisitado ja esta reservado para essa data"
    else
      reservas_conflitantes2 = Reserva.abertas.where("data_entrada_hospedagem <= ? AND data_saida_hospedagem >= ?", data_entrada_hospedagem, data_entrada_hospedagem)
      if not reservas_conflitantes2.where("quarto_id = ?", quarto_id).empty?
        errors[:base] << "O quarto requisitado ja esta reservado para essa data"
      end
    end

    hospedagens_conflitantes1 = Hospedagem.abertas.where("data_encerramento IS NOT NULL AND data_encerramento >= ?", data_saida_hospedagem)
    if not hospedagens_conflitantes1.where("quarto_id = ?", quarto_id).empty?
      errors[:base] << "O quarto requisitado ja esta sendo usado nessa data"
    else
      hospedagens_conflitantes2 = Hospedagem.abertas.where("data_encerramento IS NOT NULL AND data_encerramento >= ?", data_entrada_hospedagem)
      if not hospedagens_conflitantes2.where("quarto_id = ?", quarto_id).empty?
        errors[:base] << "O quarto requisitado ja esta sendo usado nessa data"
      end
    end

  end
end
